home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / text / edit / tecoc-146.lha / skpcmd.c < prev    next >
C/C++ Source or Header  |  1991-07-11  |  15KB  |  493 lines

  1. /*****************************************************************************
  2.  
  3.     SkpCmd.c
  4.  
  5. *****************************************************************************/
  6.  
  7. #include "zport.h"        /* define portability identifiers */
  8. #include "tecoc.h"        /* define general identifiers */
  9. #include "defext.h"        /* define external global variables */
  10. #include "chmacs.h"        /* define character processing macros */
  11. #include "dchars.h"        /* define identifiers for characters */
  12. #include "deferr.h"        /* define identifiers for error messages */
  13.  
  14. #if USE_PROTOTYPES
  15. static DEFAULT SkpArg(void);    /* skip command with text argument */
  16. static DEFAULT SkpCrt(void);    /* skip a ^ (caret) command */
  17. static DEFAULT SkpCtA(void);    /* skip control-A command */
  18. static DEFAULT SkpCtU(void);    /* skip control-U command */
  19. static DEFAULT SkpDAr(void);    /* skip "double text argument" command */
  20. static DEFAULT SkpDqu(void);    /* skip a " (double quote) command */
  21. static DEFAULT SkpE(void);    /* skip one of the E commands */
  22. static DEFAULT SkpExc(void);    /* skip command with text argument */
  23. static DEFAULT SkpF(void);    /* skip one of the F commands */
  24. static DEFAULT SkpOne(void);    /* skip one command character */
  25. static DEFAULT SkpSkp(void);    /* */
  26. #endif
  27.  
  28. /*****************************************************************************
  29.  
  30.     SkpArg()
  31.  
  32. *****************************************************************************/
  33.  
  34. static DEFAULT SkpArg()        /* skip command with text argument */
  35. {
  36.     BOOLEAN TTrace;        /* temp: holds trace flag */
  37.  
  38.     TTrace = TraceM;            /* save trace mode flag */
  39.     TraceM = FALSE;                /* keep FindES from tracing */
  40.     if (FindES(ESCAPE) == FAILURE)        /* find end of string */
  41.         {
  42.         TraceM = TTrace;        /* restore trace mode flag */
  43.         return FAILURE;
  44.         }
  45.  
  46.     TraceM = TTrace;            /* restore trace mode flag */
  47.     CmdMod = '\0';                /* clear modifiers flags */
  48.     return SUCCESS;
  49. }
  50.  
  51.  
  52. /*****************************************************************************
  53.  
  54.     SkpCtA()
  55.  
  56. *****************************************************************************/
  57.  
  58. static DEFAULT SkpCtA()        /* skip control-A command */
  59. {
  60.     BOOLEAN    TTrace;        /* temp: holds trace flag */
  61.  
  62.     TTrace = TraceM;            /* save trace mode flag */
  63.     TraceM = FALSE;                /* keep FindES from tracing */
  64.     if (FindES(CTRL_A) == FAILURE)        /* find end of string */
  65.         {
  66.         TraceM = TTrace;        /* restore trace mode flag */
  67.         return FAILURE;
  68.         }
  69.  
  70.     TraceM = TTrace;            /* restore trace mode flag */
  71.     CmdMod = '\0';                /* clear modifiers flags */
  72.     return SUCCESS;
  73. }
  74.  
  75.  
  76. /*****************************************************************************
  77.  
  78.     SkpCtU()
  79.  
  80. *****************************************************************************/
  81.  
  82. static DEFAULT SkpCtU()        /* skip control-U command */
  83. {
  84.     BOOLEAN    TTrace;        /* temp: holds trace flag */
  85.  
  86.     if (CBfPtr == CStEnd)
  87.         if (MStTop < 0)            /* if not in a macro */
  88.             {
  89.             ErrUTC();        /* unterminated command */
  90.             return FAILURE;
  91.             }
  92.         else
  93.             return SUCCESS;
  94.     ++CBfPtr;
  95.     TTrace = TraceM;            /* save trace mode flag */
  96.     TraceM = FALSE;                /* keep FindES from tracing */
  97.     if (FindES(ESCAPE) == FAILURE)        /* find end of string */
  98.         {
  99.         TraceM = TTrace;        /* restore trace mode flag */
  100.         return FAILURE;
  101.         }
  102.  
  103.     TraceM = TTrace;            /* restore trace mode flag */
  104.     CmdMod = '\0';                /* clear modifiers flags */
  105.     return SUCCESS;
  106. }
  107.  
  108.  
  109. /*****************************************************************************
  110.  
  111.     SkpDAr()
  112.  
  113. *****************************************************************************/
  114.  
  115. static DEFAULT SkpDAr()        /* skip "double text argument" command */
  116. {
  117.     BOOLEAN TTrace;        /* saves TraceM temporarily */
  118.  
  119.     TTrace = TraceM;            /* save trace mode flag */
  120.     TraceM = FALSE;                /* keep FindES from tracing */
  121.     if (FindES(ESCAPE) == FAILURE)
  122.         {
  123.         TraceM = TTrace;        /* restore trace mode flag */
  124.         return FAILURE;
  125.         }
  126.     if (CmdMod & ATSIGN)            /* if at-sign modified */
  127.         --CBfPtr;
  128.     if (FindES(ESCAPE) == FAILURE)
  129.         {
  130.         TraceM = TTrace;        /* restore trace mode flag */
  131.         return FAILURE;
  132.         }
  133.     TraceM = TTrace;            /* restore trace mode flag */
  134.     return SUCCESS;
  135. }
  136.  
  137.  
  138. /*****************************************************************************
  139.  
  140.     SkpDqu()
  141.  
  142. *****************************************************************************/
  143.  
  144. static DEFAULT SkpDqu()        /* skip a " (double quote) command */
  145. {
  146.     DBGFEN(3,"SkpDqu",NULL);
  147.     if (CBfPtr == CStEnd)            /* if end of command string */
  148.         if (MStTop < 0)            /* if not in a macro */
  149.             {
  150.             ErrUTC();        /* unterminated command */
  151.             return FAILURE;
  152.             }
  153.         else
  154.             return SUCCESS;
  155.     ++CBfPtr;
  156.     switch (To_Upper(*CBfPtr)) {
  157.         case 'A':
  158.         case 'C':
  159.         case 'D':
  160.         case 'E':
  161.         case 'F':
  162.         case 'U':
  163.         case '=':
  164.         case 'G':
  165.         case '>':
  166.         case 'L':
  167.         case 'S':
  168.         case 'T':
  169.         case '<':
  170.         case 'N':
  171.         case 'R':
  172.         case 'V':
  173.         case 'W':
  174.             break;
  175.  
  176.         default:
  177.             ErrMsg(ERR_IQC);    /* ill. char. after " */
  178.             DBGFEX(3,DbgFNm,"FAILURE");
  179.             return FAILURE;
  180.     }
  181.  
  182.     CmdMod = '\0';                /* clear modifiers flags */
  183.  
  184.     DBGFEX(3,DbgFNm,"SUCCESS");
  185.     return SUCCESS;
  186. }
  187.  
  188.  
  189. /*****************************************************************************
  190.  
  191.     SkpExc()
  192.  
  193. *****************************************************************************/
  194.  
  195. static DEFAULT SkpExc()        /* skip command with text argument */
  196. {
  197.     BOOLEAN    TTrace;        /* temp: holds trace flag */
  198.  
  199.     TTrace = TraceM;            /* save trace mode flag */
  200.     TraceM = FALSE;                /* keep FindES from tracing */
  201.     if (FindES('!') == FAILURE)        /* find end of string */
  202.         {
  203.         TraceM = TTrace;        /* restore trace mode flag */
  204.         return FAILURE;
  205.         }
  206.  
  207.     TraceM = TTrace;            /* restore trace mode flag */
  208.     CmdMod = '\0';                /* clear modifiers flags */
  209.     return SUCCESS;
  210. }
  211.  
  212.  
  213. /*****************************************************************************
  214.  
  215.     SkpSkp()
  216.  
  217. *****************************************************************************/
  218.  
  219. static DEFAULT SkpSkp()        /* */
  220. {
  221.     CmdMod = '\0';                /* clear ATSIGN modifier */
  222.     return SUCCESS;
  223. }
  224.  
  225.  
  226. /*****************************************************************************
  227.  
  228.     SkpF()
  229.  
  230. *****************************************************************************/
  231.  
  232. static DEFAULT SkpF()            /* skip one of the F commands */
  233. {
  234.     if (CBfPtr == CStEnd)
  235.         if (MStTop < 0)            /* if not in a macro */
  236.             {
  237.             ErrUTC();        /* unterminated command */
  238.             return FAILURE;
  239.             }
  240.         else
  241.             return SUCCESS;
  242.     ++CBfPtr;
  243.  
  244.     switch (To_Upper(*CBfPtr)) {
  245.  
  246.         case 'S':
  247.         case 'N':
  248.         case 'C':
  249.         case '_':    return SkpDAr();
  250.  
  251.         case 'D':
  252.         case 'R':
  253.         case 'B':
  254.         case 'K':    return SkpArg();
  255.  
  256.         case '>':
  257.         case '<':
  258.         case '\'':
  259.         case '|':    return SkpSkp();
  260.  
  261.         default:
  262.                   ErrChr(ERR_IFC, *CBfPtr);
  263.                 return FAILURE;
  264.     }
  265. }
  266.  
  267.  
  268. /*****************************************************************************
  269.  
  270.     SkpOne()
  271.  
  272. *****************************************************************************/
  273.  
  274. static DEFAULT SkpOne()        /* skip one command character */
  275. {
  276. #if DEBUGGING
  277.     static char *DbgFNm = "SkpOne";
  278.     sprintf(DbgSBf,"*CBfPtr = '%c'", *CBfPtr);
  279.     DbgFEn(3,DbgFNm,DbgSBf);
  280. #endif
  281.     if (CBfPtr == CStEnd) {
  282.         if (MStTop < 0) {        /* if not in a macro */
  283.             ErrUTC();        /* unterminated command */
  284.             DBGFEX(3,DbgFNm,"FAILURE");
  285.             return FAILURE;
  286.         } else {
  287.             DBGFEX(3,DbgFNm,"SUCCESS");
  288.             return SUCCESS;
  289.         }
  290.     }
  291.  
  292.     ++CBfPtr;
  293.  
  294. #if DEBUGGING
  295.     sprintf(DbgSBf,"*CBfPtr = '%c'", *CBfPtr);
  296.     DbgFEx(3,DbgFNm,DbgSBf);
  297. #endif
  298.     return SUCCESS;
  299. }
  300.  
  301.  
  302. /*****************************************************************************
  303.  
  304.     SkpCrt()
  305.  
  306. *****************************************************************************/
  307.  
  308. static DEFAULT SkpCrt()        /* skip a ^ (caret) command */
  309. {
  310.     static DEFAULT (*FCAray[])(VVOID) = {
  311. /* ^A*/ SkpCtA,   /* ^B*/ SkpSkp,   /* ^C*/ SkpSkp,   /* ^D*/ SkpSkp,
  312. /* ^E*/ SkpSkp,   /* ^F*/ SkpSkp,   /* ^G*/ SkpSkp,   /* ^H*/ SkpSkp,
  313. /*TAB*/ SkpArg,   /* LF*/ ExeNul,   /* VT*/ SkpSkp,   /* FF*/ SkpSkp,
  314. /* CR*/ ExeNul,   /* ^N*/ SkpSkp,   /* ^O*/ SkpSkp,   /* ^P*/ SkpSkp,
  315. /* ^Q*/ SkpSkp,   /* ^R*/ SkpSkp,   /* ^S*/ SkpSkp,   /* ^T*/ SkpSkp,
  316. /* ^U*/ SkpCtU,   /* ^V*/ SkpSkp,   /* ^W*/ SkpSkp,   /* ^X*/ SkpSkp,
  317. /* ^Y*/ SkpSkp,   /* ^Z*/ SkpSkp,   /* ^[*/ SkpSkp,   /* ^\*/ SkpSkp,
  318. /* ^]*/ SkpSkp,   /* ^^*/ SkpOne,   /* ^_*/ SkpSkp
  319.     };
  320.     WORD    CDummy;
  321.  
  322.     if (CBfPtr == CStEnd)            /* if end of command string */
  323.         if (MStTop < 0)            /* if macro stack empty */
  324.             {
  325.             ErrUTC();        /* unterminated command */
  326.             return FAILURE;
  327.             }
  328.         else
  329.             return SUCCESS;
  330.     ++CBfPtr;
  331.     if ((*CBfPtr >= 'A') && (*CBfPtr <= '_'))
  332.         CDummy = *CBfPtr - 'A';
  333.     else if (Is_Lower(*CBfPtr))
  334.         CDummy = *CBfPtr - 'a';        /* convert to upper case */
  335.     else {
  336.         ErrMsg(ERR_IUC);        /* illegal char after ^ */
  337.         return FAILURE;
  338.     }
  339.     return (*FCAray[CDummy])();
  340. }
  341.  
  342.  
  343. /*****************************************************************************
  344.  
  345.     SkpE()
  346.  
  347. *****************************************************************************/
  348.  
  349.  
  350. static DEFAULT SkpE()            /* skip one of the E commands */
  351. {
  352.     unsigned char TmpChr;
  353.     static DEFAULT (*FEAray[])(VVOID) = {
  354. /* A */ SkpSkp,    /* B */ SkpArg,    /* C */ SkpSkp,    /* D */ SkpSkp,
  355. /* E */ 0,         /* F */ SkpSkp,    /* G */ SkpArg,    /* H */ SkpSkp,
  356. /* I */ SkpArg,    /* J */ SkpSkp,    /* K */ SkpSkp,    /* L */ SkpArg,
  357. /* M */ SkpSkp,    /* N */ SkpSkp,    /* O */ SkpSkp,    /* P */ SkpSkp,
  358. /* Q */ SkpOne,    /* R */ SkpArg,    /* S */ SkpSkp,    /* T */ SkpSkp,
  359. /* U */ SkpSkp,    /* V */ SkpSkp,    /* W */ SkpArg,    /* X */ SkpSkp,
  360. /* Y */ SkpSkp,    /* Z */ SkpSkp
  361.     };
  362.     if (CBfPtr == CStEnd)
  363.         if (MStTop < 0)            /* if not in a macro */
  364.             {
  365.             ErrUTC();        /* unterminated command */
  366.             return FAILURE;
  367.             }
  368.         else
  369.             return SUCCESS;
  370.  
  371.     ++CBfPtr;
  372.     TmpChr = To_Upper(*CBfPtr);
  373.  
  374.     if (TmpChr == '%')
  375.         return SkpOne();
  376.     else if (TmpChr == '_')
  377.         return SkpArg();
  378.     else if (!Is_Upper(TmpChr) || (TmpChr=='E'))
  379.         {
  380.         ErrChr(ERR_IEC, *CBfPtr);
  381.         return FAILURE;
  382.         }
  383.     return (*FEAray[TmpChr-'A'])();
  384. }
  385.  
  386.  
  387.  
  388. /*****************************************************************************
  389.  
  390.     SkpCmd()
  391.  
  392.     This function "skips" TECO commands. It is used when TECO needs to
  393. skip forward under one of these conditions:
  394.  
  395.     1. flow to the end of a conditional
  396.     2. flow to the else clause of a conditional
  397.     3. flow to the end of a loop
  398.     4. flow while searching for a tag
  399.  
  400.     When this function is called, CBfPtr points to a command.  When this
  401. function returns, CBfPtr is left pointing to the last character of the
  402. command. In the case of a command like T, CBfPtr is not changed.  In the
  403. case of a command like Stext<ESC>, CBfPtr is left pointing to the <ESC>.
  404.  
  405. *****************************************************************************/
  406.  
  407. DEFAULT SkpCmd()        /* skip a "command" */
  408. {
  409.     static DEFAULT (*FSAray[])(VVOID) = {
  410. /*NUL*/ ExeNul,   /* ^A*/ SkpCtA,   /* ^B*/ SkpSkp,   /* ^C*/ SkpSkp,
  411. /* ^D*/ SkpSkp,   /* ^E*/ SkpSkp,   /* ^F*/ SkpSkp,   /* ^G*/ SkpSkp,
  412. /* BS*/ SkpSkp,   /*TAB*/ SkpArg,   /* LF*/ ExeNul,   /* VT*/ SkpSkp,
  413. /* FF*/ SkpSkp,   /* CR*/ ExeNul,   /* ^N*/ SkpSkp,   /* ^O*/ SkpSkp,
  414. /* ^P*/ SkpSkp,   /* ^Q*/ SkpSkp,   /* ^R*/ SkpSkp,   /* ^S*/ SkpSkp,
  415. /* ^T*/ SkpSkp,   /* ^U*/ SkpCtU,   /* ^V*/ SkpSkp,   /* ^W*/ SkpSkp,
  416. /* ^X*/ SkpSkp,   /* ^Y*/ SkpSkp,   /* ^Z*/ SkpSkp,   /*ESC*/ SkpSkp,
  417. /* ^\*/ SkpSkp,   /* ^]*/ SkpSkp,   /* ^^*/ SkpOne,   /* ^_*/ SkpSkp,
  418. /* SP*/ ExeNul,   /* ! */ SkpExc,   /* " */ SkpDqu,   /* # */ SkpSkp,
  419. /* $ */ SkpSkp,   /* % */ SkpOne,   /* & */ SkpSkp,   /* ' */ SkpSkp,
  420. /* ( */ SkpSkp,   /* ) */ SkpSkp,   /* * */ SkpSkp,   /* + */ SkpSkp,
  421. /* , */ SkpSkp,   /* - */ SkpSkp,   /* . */ SkpSkp,   /* / */ SkpSkp,
  422. /* 0 */ SkpSkp,   /* 1 */ SkpSkp,   /* 2 */ SkpSkp,   /* 3 */ SkpSkp,
  423. /* 4 */ SkpSkp,   /* 5 */ SkpSkp,   /* 6 */ SkpSkp,   /* 7 */ SkpSkp,
  424. /* 8 */ SkpSkp,   /* 9 */ SkpSkp,   /* : */ SkpSkp,   /* ; */ SkpSkp,
  425. /* < */ SkpSkp,   /* = */ SkpSkp,   /* > */ SkpSkp,   /* ? */ SkpSkp,
  426. /* @ */ ExeAtS,   /* A */ SkpSkp,   /* B */ SkpSkp,   /* C */ SkpSkp,
  427. /* D */ SkpSkp,   /* E */ SkpE,     /* F */ SkpF,     /* G */ SkpOne,
  428. /* H */ SkpSkp,   /* I */ SkpArg,   /* J */ SkpSkp,   /* K */ SkpSkp,
  429. /* L */ SkpSkp,   /* M */ SkpOne,   /* N */ SkpArg,   /* O */ SkpArg,
  430. /* P */ SkpSkp,   /* Q */ SkpOne,   /* R */ SkpSkp,   /* S */ SkpArg,
  431. /* T */ SkpSkp,   /* U */ SkpOne,   /* V */ SkpSkp,   /* W */ SkpSkp,
  432. /* X */ SkpOne,   /* Y */ SkpSkp,   /* Z */ SkpSkp,   /* [ */ SkpOne,
  433. /* \ */ SkpSkp,   /* ] */ SkpOne,   /* ^ */ SkpCrt,   /* _ */ SkpArg,
  434. /* ` */ SkpSkp,   /* a */ SkpSkp,   /* b */ SkpSkp,   /* c */ SkpSkp,
  435. /* d */ SkpSkp,   /* e */ SkpE,     /* f */ SkpF,     /* g */ SkpOne,
  436. /* h */ SkpSkp,   /* i */ SkpArg,   /* j */ SkpSkp,   /* k */ SkpSkp,
  437. /* l */ SkpSkp,   /* m */ SkpOne,   /* n */ SkpArg,   /* o */ SkpArg,
  438. /* p */ SkpSkp,   /* q */ SkpOne,   /* r */ SkpSkp,   /* s */ SkpArg,
  439. /* t */ SkpSkp,   /* u */ SkpOne,   /* v */ SkpSkp,   /* w */ SkpSkp,
  440. /* x */ SkpOne,   /* y */ SkpSkp,   /* z */ SkpSkp,   /* { */ SkpSkp,
  441. /* | */ SkpSkp,   /* } */ SkpSkp,   /* ~ */ SkpSkp,   /*DEL*/ SkpSkp,
  442. /*129*/ SkpSkp,   /*130*/ SkpSkp,   /*131*/ SkpSkp,   /*132*/ SkpSkp,
  443. /*133*/ SkpSkp,   /*134*/ SkpSkp,   /*135*/ SkpSkp,   /*136*/ SkpSkp,
  444. /*137*/ SkpSkp,   /*138*/ SkpSkp,   /*139*/ SkpSkp,   /*140*/ SkpSkp,
  445. /*141*/ SkpSkp,   /*142*/ SkpSkp,   /*143*/ SkpSkp,   /*144*/ SkpSkp,
  446. /*145*/ SkpSkp,   /*146*/ SkpSkp,   /*147*/ SkpSkp,   /*148*/ SkpSkp,
  447. /*149*/ SkpSkp,   /*150*/ SkpSkp,   /*151*/ SkpSkp,   /*152*/ SkpSkp,
  448. /*153*/ SkpSkp,   /*154*/ SkpSkp,   /*155*/ SkpSkp,   /*156*/ SkpSkp,
  449. /*157*/ SkpSkp,   /*158*/ SkpSkp,   /*159*/ SkpSkp,   /*160*/ SkpSkp,
  450. /*161*/ SkpSkp,   /*162*/ SkpSkp,   /*163*/ SkpSkp,   /*164*/ SkpSkp,
  451. /*165*/ SkpSkp,   /*166*/ SkpSkp,   /*167*/ SkpSkp,   /*168*/ SkpSkp,
  452. /*169*/ SkpSkp,   /*170*/ SkpSkp,   /*171*/ SkpSkp,   /*172*/ SkpSkp,
  453. /*173*/ SkpSkp,   /*174*/ SkpSkp,   /*175*/ SkpSkp,   /*176*/ SkpSkp,
  454. /*177*/ SkpSkp,   /*178*/ SkpSkp,   /*179*/ SkpSkp,   /*180*/ SkpSkp,
  455. /*181*/ SkpSkp,   /*182*/ SkpSkp,   /*183*/ SkpSkp,   /*184*/ SkpSkp,
  456. /*185*/ SkpSkp,   /*186*/ SkpSkp,   /*187*/ SkpSkp,   /*188*/ SkpSkp,
  457. /*189*/ SkpSkp,   /*190*/ SkpSkp,   /*191*/ SkpSkp,   /*192*/ SkpSkp,
  458. /*193*/ SkpSkp,   /*194*/ SkpSkp,   /*195*/ SkpSkp,   /*196*/ SkpSkp,
  459. /*197*/ SkpSkp,   /*198*/ SkpSkp,   /*199*/ SkpSkp,   /*200*/ SkpSkp,
  460. /*201*/ SkpSkp,   /*202*/ SkpSkp,   /*203*/ SkpSkp,   /*204*/ SkpSkp,
  461. /*205*/ SkpSkp,   /*206*/ SkpSkp,   /*207*/ SkpSkp,   /*208*/ SkpSkp,
  462. /*209*/ SkpSkp,   /*210*/ SkpSkp,   /*211*/ SkpSkp,   /*212*/ SkpSkp,
  463. /*213*/ SkpSkp,   /*214*/ SkpSkp,   /*215*/ SkpSkp,   /*216*/ SkpSkp,
  464. /*217*/ SkpSkp,   /*218*/ SkpSkp,   /*219*/ SkpSkp,   /*220*/ SkpSkp,
  465. /*221*/ SkpSkp,   /*222*/ SkpSkp,   /*223*/ SkpSkp,   /*224*/ SkpSkp,
  466. /*225*/ SkpSkp,   /*226*/ SkpSkp,   /*227*/ SkpSkp,   /*228*/ SkpSkp,
  467. /*229*/ SkpSkp,   /*230*/ SkpSkp,   /*231*/ SkpSkp,   /*232*/ SkpSkp,
  468. /*233*/ SkpSkp,   /*234*/ SkpSkp,   /*235*/ SkpSkp,   /*236*/ SkpSkp,
  469. /*237*/ SkpSkp,   /*238*/ SkpSkp,   /*239*/ SkpSkp,   /*240*/ SkpSkp,
  470. /*241*/ SkpSkp,   /*242*/ SkpSkp,   /*243*/ SkpSkp,   /*244*/ SkpSkp,
  471. /*245*/ SkpSkp,   /*246*/ SkpSkp,   /*247*/ SkpSkp,   /*248*/ SkpSkp,
  472. /*249*/ SkpSkp,   /*250*/ SkpSkp,   /*251*/ SkpSkp,   /*252*/ SkpSkp,
  473. /*253*/ SkpSkp,   /*254*/ SkpSkp,   /*255*/ SkpSkp,   /*256*/ SkpSkp
  474.     };
  475.     DEFAULT Status;
  476.  
  477. #if DEBUGGING
  478.     static char *DbgFNm = "SkpCmd";
  479.     sprintf(DbgSBf,"*CBfPtr = '%c', at_sign is %s",
  480.         *CBfPtr, (CmdMod & ATSIGN) ? "TRUE" : "FALSE");
  481.     DbgFEn(3,DbgFNm,DbgSBf);
  482. #endif
  483.  
  484.     Status = (*FSAray[*CBfPtr])();
  485.  
  486. #if DEBUGGING
  487.     sprintf(DbgSBf,"*CBfPtr = '%c'", *CBfPtr);
  488.     DbgFEx(3,DbgFNm,DbgSBf);
  489. #endif
  490.  
  491.     return Status;
  492. }
  493.